/*************************************************************************
	> File Name: oj-330.cpp
	> Author: Wang Bo
	> Mail: 1276106221@qq.com
	> Created Time: 2021年01月21日 星期四 10时50分07秒
 ************************************************************************/
#include <iostream>
#include <cstdio>
using namespace std;
//维护多个树状数组
#define MAX_N 100000
long long c[2][MAX_N + 5];
#define lowbit(a) (a & -a)

//在第k个树状数组的第i个位置加上x，长度为n
void add(int k, int i, long long x, int n) {
    while (i <= n) {
        c[k][i] += x;
        i += lowbit(i);
    }
}

long long query(int k, int i) {
    long long sum = 0;
    while (i) {
        sum += c[k][i];
        i -= lowbit(i);
    }
    return sum;
}

long long S(int i) {
    return (i + 1) * query(0, i) - query(1, i);
}

void modify(int i, long long x, int n) {
    add(0, i, x, n);
    add(1, i, i * x, n);
}

int main() {
    int n, m;
    char s[10];
    cin >> n >> m;
    for (int i = 1, pre = 0, a; i <= n; ++i) {
        cin >> a;
        modify(i, a - pre, n);
        pre = a;
    }
    int l, r;
    long long d;
    for (int i = 0; i < m; ++i) {
        scanf("%s", s);
        switch (s[0]) {
            case 'C':
                scanf("%d%d%lld", &l, &r, &d);
                modify(l, d, n);
                modify(r + 1, -d, n);
                break;
            case 'Q':
                scanf("%d%d", &l, &r);
                cout << S(r) - S(l - 1) << endl;
                break;
        }
    }
    return 0;
}
